home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / plnk081.zip / pilot-link.0.8.1 / libsock / appinfo.c < prev    next >
C/C++ Source or Header  |  1997-08-02  |  2KB  |  71 lines

  1. /* appinfo.c:  Translate Pilot category info
  2.  *
  3.  * Copyright (c) 1996, 1997, Kenneth Albanowski
  4.  *
  5.  * This is free software, licensed under the GNU Public License V2.
  6.  * See the file COPYING for details.
  7.  */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include "pi-source.h"
  13. #include "pi-socket.h"
  14. #include "pi-dlp.h"
  15. #include "pi-appinfo.h"
  16.  
  17. int unpack_CategoryAppInfo(struct CategoryAppInfo * ai, unsigned char * record, int len) {
  18.   int i;
  19.   int r;
  20.   if (len < 2+16*16+16+4)
  21.     return 0;
  22.   r = get_short(record);
  23.   for (i=0;i<16;i++) {
  24.     if (r & (1<<i))
  25.       ai->renamed[i] = 1;
  26.     else
  27.       ai->renamed[i] = 0;
  28.   }
  29.   record+=2;
  30.   for(i=0;i<16;i++) {
  31.     memcpy(ai->name[i], record, 16);
  32.     record += 16;
  33.   }
  34.   memcpy(ai->ID, record, 16);
  35.   record += 16;
  36.   ai->lastUniqueID = get_byte(record);
  37.   record += 4;
  38.   return 2+16*16+16+4;
  39. }
  40.  
  41. int pack_CategoryAppInfo(struct CategoryAppInfo * ai, unsigned char * record, int len) {
  42.   int i;
  43.   int r;
  44.   unsigned char * start = record;
  45.   if (!record) {
  46.     return 2+16*16+16+4;
  47.   }
  48.   if (len<(2+16*16+16+4))
  49.     return 0; /*not enough room*/
  50.   r = 0;
  51.   for (i=0;i<16;i++) {
  52.     if (ai->renamed[i])
  53.       r |= (1<<i);
  54.   }
  55.   set_short(record, r);
  56.   record += 2;
  57.   for(i=0;i<16;i++) {
  58.     memcpy(record, ai->name[i], 16);
  59.     record += 16;
  60.   }
  61.   memcpy(record, ai->ID, 16);
  62.   record += 16;
  63.   set_byte(record, ai->lastUniqueID);
  64.   record ++;
  65.   set_byte(record, 0); /* gapfil */
  66.   set_short(record+1, 0); /* gapfil */
  67.   record += 3;
  68.   
  69.   return (record-start);
  70. }
  71.